#ifndef CHAINCODER
#define CHAINCODER

#include <base\vec2i.h>

#include <cmath>
#include <iostream>

class chainCoder {


public:

  static unsigned char encode(vec2i diff) {
    if (diff.x == 0 && diff.y == 0) {
      cerr << "ChainCoder::encode: invalid diff" << endl;
      exit(0);
    }
    else if (diff.x ==  0) {
      if (diff.y ==  1) return 0;
      if (diff.y == -1) return 4;
    }
    else if (diff.x ==  1) {
      if (diff.y ==  0) return 2;
      if (diff.y ==  1) return 1;
      if (diff.y == -1) return 3;
    }
    else if (diff.x == -1) {
      if (diff.y ==  0) return 6;
      if (diff.y ==  1) return 7;
      if (diff.y == -1) return 5;
    }

    cerr << "ChainCoder::encode: invalid diff" << endl;
    exit(0);

    return 255;
  }
};

#endif